home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 2 / Atari Mega Archive CD - Volume 2.iso / 8bit / cislib_a / fileli.xmo < prev    next >
Text File  |  1995-04-22  |  7KB  |  327 lines

  1. (* FILELIB.I - Routines to allow the use of standard ATARI I/O calls in KYAN 
  2.    Pascal programs. 
  3.  
  4.    IOCBUsed  - If called immediately following a pascal Reset or Rewrite call 
  5.               this function will return the number of the IOCB that was used. 
  6.    FileOpen  - Exactly like the ATARI Basic OPEN command. 
  7.    FileClose - Exactly like the ATARI Basic CLOSE command. 
  8.    FileGet   - Replace the parameters REC and RECLEN with the name and length 
  9.                of your record and this routine will read one record from the 
  10.                file. 
  11.    FilePut   - The inverse of FileGet. 
  12.    FileNote  - Exactly like the ATARI Basic NOTE command. 
  13.    FilePoint - Exactly like the ATARI Basic POINT command. 
  14.  
  15.    I don't recommend that you mix these routines with the standard Pascal 
  16.    I/O routines, though CLOSE might be useful.  They were written for use in a 
  17.    small database program the DEMANDED true random access files.  Use them with 
  18.    care as none of the protection provided by Pascal is present here.        *) 
  19.  
  20.  
  21. Function IOCBUsed : Integer; 
  22.  
  23. Begin 
  24. #a 
  25.  
  26.      LDA $2E        ;Get IOCB # 
  27.      LSR A          ;Divide by 16 
  28.      LSR A 
  29.      LSR A 
  30.      LSR A 
  31.      LDY #3         ;Store in IOCBnum 
  32.      STA (SP),Y 
  33.      INY 
  34.      LDA #0 
  35.      STA (SP),Y 
  36.  
  37. End; (* IOCBUsed *) 
  38.  
  39.  
  40. Procedure FileOpen(IOCBnum,IOdir,Auxbyte : Integer; 
  41.                    Var FileName : String15); 
  42.  
  43. Begin 
  44. #a 
  45.  
  46. ICHID EQU $0340 
  47. ICDNO EQU $0341 
  48. ICCMD EQU $0342 
  49. ICSTA EQU $0343 
  50. ICBAL EQU $0344 
  51. ICBAH EQU $0345 
  52. ICPTL EQU $0346 
  53. ICPTH EQU $0347 
  54. ICBLL EQU $0348 
  55. ICBLH EQU $0349 
  56. ICAX1 EQU $034A 
  57. ICAX2 EQU $034B 
  58. ICAX3 EQU $034C 
  59. ICAX4 EQU $034D 
  60. ICAX5 EQU $034E 
  61. ICAX6 EQU $034F 
  62.  
  63. CIOV  EQU $E456 
  64.  
  65. ; T   = LSB of 'FileName' 
  66. ; T+1 = MSB of 'FileName' 
  67. ; T+2 = LSB of AuxByte 
  68. ; T+3 = MSB of AuxByte (Unused) 
  69. ; T+4 = LSB of IOdir 
  70. ; T+5 = MSB of IOdir (Unused) 
  71. ; T+6 = LSB of IOCBnum 
  72. ; T+7 = MSB of IOCBnum (Unused) 
  73.  
  74.      TXA            ;Save X register 
  75.      PHA 
  76.      LDX #7         ;Copy heap 
  77.      LDY #10 
  78. CL1  LDA (SP),Y 
  79.      STA T,X 
  80.      DEY 
  81.      DEX 
  82.      BPL CL1 
  83.      LDA T+6        ;Get IOCB # 
  84.      ASL A          ;Multiply by 16 
  85.      ASL A 
  86.      ASL A 
  87.      ASL A 
  88.      TAX            ;Move to X register 
  89.      LDA #3         ;Open command 
  90.      STA ICCMD,X 
  91.      LDA T          ;Filename address 
  92.      STA ICBAL,X 
  93.      LDA T+1 
  94.      STA ICBAH,X 
  95.      LDA T+4        ;Data direction 
  96.      STA ICAX1,X 
  97.      LDA T+2        ;Aux byte 
  98.      STA ICAX2,X 
  99.      JSR CIOV       ;Do the I/O 
  100.      PLA            ;Restore X register 
  101.      TXA 
  102.  
  103. End; (* FileOpen *) 
  104.  
  105.  
  106. Procedure FileClose(IOCBnum : Integer); 
  107.  
  108. Begin 
  109. #a 
  110.  
  111. ; T   = LSB of IOCBnum 
  112. ; T+1 = MSB of IOCBnum (Unused) 
  113.  
  114.      TXA            ;Save X register 
  115.      PHA 
  116.      LDX #1         ;Copy heap 
  117.      LDY #4 
  118. CL2  LDA (SP),Y 
  119.      STA T,X 
  120.      DEY 
  121.      DEX 
  122.      BPL CL2 
  123.      LDA T          ;Get IOCB # 
  124.      ASL A          ;Multiply by 16 
  125.      ASL A 
  126.      ASL A 
  127.      ASL A 
  128.      TAX            ;Move to X register 
  129.      LDA #12        ;Close command 
  130.      STA ICCMD,X 
  131.      JSR CIOV       ;Do the I/O 
  132.      PLA            ;Restore X register 
  133.      TAX 
  134.  
  135. End; (* FileClose *) 
  136.  
  137.  
  138. Procedure FileGet(IOCBnum : Integer; 
  139.                   Var Rec : RecType; 
  140.                   RecLen  : Integer); 
  141.  
  142. Begin 
  143. #a 
  144.  
  145. ; T   = LSB of Length 
  146. ; T+1 = MSB of Length 
  147. ; T+2 = LSB of 'Word' 
  148. ; T+3 = MSB of 'Word' 
  149. ; T+4 = LSB of IOCBnum 
  150. ; T+5 = MSB of IOCBnum (Unused) 
  151.  
  152.      TXA            ;Saved X register 
  153.      PHA 
  154.      LDX #5         ;Copy heap 
  155.      LDY #8 
  156. CL3  LDA (SP),Y 
  157.      STA T,X 
  158.      DEY 
  159.      DEX 
  160.      BPL CL3 
  161.      LDA T+4        ;Get IOCB # 
  162.      ASL A          ;Multiply by 16 
  163.      ASL A 
  164.      ASL A 
  165.      ASL A 
  166.      TAX            ;Move to X register 
  167.      LDA #7         ;Get record command 
  168.      STA ICCMD,X 
  169.      LDA T+2        ;Data address 
  170.      STA ICBAL,X 
  171.      LDA T+3 
  172.      STA ICBAH,X 
  173.      LDA T          ;Data length 
  174.      STA ICBLL,X 
  175.      LDA T+1 
  176.      STA ICBLH,X 
  177.      JSR CIOV       ;Do the I/O 
  178.      PLA            ;Restore X register 
  179.      TAX 
  180.  
  181. End; (* FileGet *) 
  182.  
  183.  
  184. Procedure FilePut(IOCBnum : Integer; 
  185.                   Var Rec : RecType; 
  186.                   RecLen  : Integer); 
  187.  
  188. Begin 
  189. #a 
  190.  
  191. ; T   = LSB of Length 
  192. ; T+1 = MSB of Length 
  193. ; T+2 = LSB of 'Word' 
  194. ; T+3 = MSB of 'Word' 
  195. ; T+4 = LSB of IOCBnum 
  196. ; T+5 = MSB of IOCBnum 
  197.  
  198.      TXA            ;Save X register 
  199.      PHA 
  200.      LDX #5         ;Copy heap 
  201.      LDY #8 
  202. CL4  LDA (SP),Y 
  203.      STA T,X 
  204.      DEY 
  205.      DEX 
  206.      BPL CL4 
  207.      LDA T+4        ;Get IOCB # 
  208.      ASL A          ;Multiply by 16 
  209.      ASL A 
  210.      ASL A 
  211.      ASL A 
  212.      TAX            ;Move to X register 
  213.      LDA #11        ;Put record command 
  214.      STA ICCMD,X 
  215.      LDA T+2        ;Data address 
  216.      STA ICBAL,X 
  217.      LDA T+3 
  218.      STA ICBAH,X 
  219.      LDA T          ;Data length 
  220.      STA ICBLL,X 
  221.      LDA T+1 
  222.      STA ICBLH,X 
  223.      JSR CIOV       ;Do the I/O 
  224.      PLA            ;Restore X register 
  225.      TAX 
  226.  
  227. End; (* FilePut *) 
  228.  
  229.  
  230. Procedure FileNote(IOCBnum : Integer; 
  231.                    Var Sector,Byte : Integer); 
  232.  
  233. Begin 
  234. #a 
  235.  
  236. ; T   = LSB of 'Byte' 
  237. ; T+1 = MSB of 'Byte' (Unused) 
  238. ; T+2 = LSB of 'Sector' 
  239. ; T+3 = MSB of 'Sector' 
  240. ; T+4 = LSB of IOCBnum 
  241. ; T+5 = MSB of IOCBnum (Unused) 
  242.  
  243.      TXA            ;Save X register 
  244.      PHA 
  245.      LDX #5         ;Copy heap 
  246.      LDY #8 
  247. CL5  LDA (SP),Y 
  248.      STA T,X 
  249.      DEY 
  250.      DEX 
  251.      BPL CL5 
  252.      LDA T+4        ;Get IOCB # 
  253.      ASL A          ;Multiply by 16 
  254.      ASL A 
  255.      ASL A 
  256.      ASL A 
  257.      PHA            ;Save for later 
  258.      TAX            ;Move to X register 
  259.      LDA #38        ;Note command 
  260.      STA ICCMD,X 
  261.      JSR CIOV       ;Do the I/O 
  262.      PLA            ;Get IOCB # X 16 
  263.      TAX            ;Move to X register 
  264.      LDY #0 
  265.      LDA ICAX5,X    ;Get LSB of Byte 
  266.      STA (T),Y 
  267.      LDA ICAX3,X    ;Get LSB of Sector 
  268.      STA (T+2),Y 
  269.      INY 
  270.      LDA #0         ;MSB of Byte 
  271.      STA (T),Y 
  272.      LDA ICAX4,X    ;Get MSB of Sector 
  273.      STA (T+2),Y 
  274.      PLA            ;Restore X register 
  275.      TAX 
  276.  
  277. End; (* FileNote *) 
  278.  
  279.  
  280. Procedure FilePoint(IOCBnum,Sector,Byte : Integer); 
  281.  
  282. Begin 
  283. #a 
  284.  
  285. ; T   = LSB of Byte 
  286. ; T+1 = MSB of Byte (Unused) 
  287. ; T+2 = LSB of Sector 
  288. ; T+3 = MSB of Sector 
  289. ; T+4 = LSB of IOCBnum 
  290. ; T+5 = MSB of IOCBnum (Unused) 
  291.  
  292.      TXA            ;Save X register 
  293.      PHA 
  294.      LDX #5         ;Copy heap 
  295.      LDY #8 
  296. CL6  LDA (SP),Y 
  297.      STA T,X 
  298.      DEY 
  299.      DEX 
  300.      BPL CL6 
  301.      LDA T+4        ;Get IOCB # 
  302.      ASL A          ;Multiply by 16 
  303.      ASL A 
  304.      ASL A 
  305.      ASL A 
  306.      TAX            ;Move to X register 
  307.      LDA #37        ;Point command 
  308.      STA ICCMD,X 
  309.      LDA T+2        ;LSB of Sector 
  310.      STA ICAX3,X 
  311.      LDA T+3        ;MSB of Sector 
  312.      STA ICAX4,X 
  313.      LDA T          ;LSB of Byte 
  314.      STA ICAX5,X 
  315.      JSR CIOV       ;Do the I/O 
  316.      PLA            ;Restore X register 
  317.      TAX 
  318.  
  319. End; (* FilePoint *) 
  320. TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT